/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

/**
 *
 * @author eagle
 */
import dominio.Area;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import dominio.Asignatura;

public class AreaDao {

    private EntityManager em;
    private Area ar = new Area();

    public AreaDao(EntityManager em) {
        this.em = em;
    }

    public Area crearArea(String nombreArea, String descripcionArea) {

        ar.setNombreArea(nombreArea);
        ar.setDescripcionArea(descripcionArea);
        em.persist(ar);
        return ar;
    }

    public Area intanciarArea(Object objeto) {
        ar = (Area) objeto;
        return ar;
    }

    public Area encontrarArea(Integer idArea) {
        return em.find(Area.class, idArea);// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
    }

    public Area encontrarArea(String nombreArea) {
        Query q = em.createQuery("SELECT ar FROM Area ar WHERE ar.nombreArea='" + nombreArea + "'");
        if (q.getResultList().isEmpty() == true) {
            return null;
        }
        else {
            ar = (Area) q.getSingleResult();
            return ar;
        }
    }

    public void borrarArea(Integer idArea) {
        ar = encontrarArea(idArea);//en este caso podemos borrar un Area por nombre
        if (ar != null) {//si no lo encuentra por supuesto no lo intenta borrar
            em.remove(ar);// borra de la tabla ese registro
        }

    }

    public Area actualizarArea(String nombreAreaAntiguo, String nombreAreaNuevo, String descripcionArea) {
        Area ar1; //Aqui se guardaria el posible dato duplicado de la BD, si no encuentra otro registro con nombre nuevo sera null
        ar = encontrarArea(nombreAreaAntiguo); //Uso un metodo de esta misma clase que me retorna un solo dato con una busqueda por nombre
        if (ar != null) {
            /*
            Ahora se verifica que los datos ingresados no existan ya en la BD
             */
            ar1 = encontrarArea(nombreAreaNuevo);

            if (ar1 == null || (ar.getNombreArea().equals(nombreAreaAntiguo))) {
                ar.setNombreArea(nombreAreaNuevo);
                ar.setDescripcionArea(descripcionArea);
            }
        }
        return ar;
    }

    public List encontrarAreas() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT ar.nombreArea FROM Area ar");// Ojo la sentencia está en Java Query Language, no SQL
        List<Area> lista = query.getResultList();
        return (lista);
    }

    public List encontrarAreasId() { //encontrar todos los usuarios
        Query query = em.createQuery("SELECT ar.idArea FROM Area ar");// Ojo la sentencia está en Java Query Language, no SQL
        List<Area> lista = query.getResultList();
        return (lista);
    }

    public List<Asignatura> encontrarAreasConsulta(String nombreArea){
        Query query = em.createQuery("SELECT at.nombreAsignatura, at.idGrado FROM Area ar,Asignatura at WHERE ar.idArea = at.idArea and ar.nombreArea = '"+nombreArea+"'");
        List<Asignatura> lista = query.getResultList();
        return lista;
    }
}
